---
--- Created by 旅行者.
--- DateTime: 2025/2/18 21:13
---
--[[
    添加自定义配方
    参数说明：
    @param name string 配方名称（预制体名称）
    @param ingredients table 材料列表，格式：{{name=材料名, amount=数量}, ...} 或 {{names={材料名1, 材料名2}, amount=数量}, ...}
    @param tech number 科技等级（使用TUNING.TECH常量）
    @param config table 配方配置表，支持以下字段：
        - builder_tag string 制作角色标签
        - atlas string 图集路径
        - image string 图标名称
        - min_spacing number 最小建造间距
        - nounlock bool 是否不解锁配方
        - numtogive number 制作数量
        - testfn function 建造条件检测函数
        - product string 产物名称（当与配方名不同时使用）
        - build_mode string 建造模式（"ground"等）
        - build_distance number 建造距离
        - placer string 放置预览预制体
        - filter string 筛选标签
        - description string 描述文本
        - canbuild function 可建造检测函数
        - sg_state string 角色状态图状态
        - no_deconstruction bool 是否不可分解
        - require_special_event string 需要特殊事件
        - dropitem string 掉落物品
        - actionstr string 动作字符串
        - manufactured bool 是否显示制造标记
    @param filters table 分类标签数组
]]
function AddCustomRecipe(name, ingredients, tech, config, tags)
    -- 转换材料格式
    local recipe_ingredients = {}
    for _, ing in ipairs(ingredients) do
        if ing.names then
            -- 支持多种选择的材料
            table.insert(recipe_ingredients, Ingredient(ing.names, ing.amount))
        else
            -- 单一材料
            table.insert(recipe_ingredients, Ingredient(ing.name, ing.amount))
        end
    end

    -- 添加配方
    AddRecipe2(name, recipe_ingredients, tech or TECH.NONE, config, tags or {"CHARACTER"})
end